#include "output_fst.h"

OutputerFst::OutputerFst()
{
    m_type = OUTPUT_FST_TYPE;
}

OutputerFst::~OutputerFst()
{

}

void OutputerFst::UpdateRadarPoint(CCVBlockInfo *message)
{
    RadarMsgProtocol MSG = { 0 };
    MSG.TargetType_F = 1;
    MSG.RAE_XYZ_LonLat_F = 0;
    MSG.Time_F = 0;
    MSG.Elevation_F = 0;
    MSG.Z_F = 0;
    MSG.Speed_F = 0;
    MSG.SpeedDir_F = 0;
    MSG.Altitude_F = 0;
    MSG.DeleteFlag = 0;

    MSG.BatchNo = 0;

    time_t ct = time(NULL);
    tm* t = gmtime(&ct);
    MSG.Time = htonl((t->tm_hour * 3600 + t->tm_min * 60 + t->tm_sec) * 1000 + 8 * 60 * 60 * 1000);

    MSG.Range = htonl(message->Range * 10);
    MSG.Azimuth = htonl(message->Azimuth * 100);
    MSG.Elevation = 00;

    MSG.Lon = 0;
    MSG.Lat = 0;
    MSG.Altitude = 0;

    MSG.Speed = 0;
    MSG.SpeedDir = 0;

    Send((const char*) &MSG, sizeof(RadarMsgProtocol));
}

void OutputerFst::UpdateRadarInfo(const radar_info* info)
{
    RadarMsgProtocol MSG = { 0 };
    MSG.TargetType_F = 1;
    MSG.RAE_XYZ_LonLat_F = 2;
    MSG.Time_F = 0;
    MSG.Elevation_F = 1;
    MSG.Z_F = 0;
    MSG.Speed_F = 1;
    MSG.SpeedDir_F = 1;
    MSG.Altitude_F = 1;
    MSG.DeleteFlag = 0;

    MSG.BatchNo = htons(info->radar_id);

    tm* t = gmtime(&info->timestamp);
    MSG.Time = htonl((t->tm_hour * 3600 + t->tm_min * 60 + t->tm_sec) * 1000 + 8 * 60 * 60 * 1000);
    MSG.Range = 0;
    MSG.Azimuth = 0;
    MSG.Elevation = 0;

    MSG.Lon = htonl(info->longitude / 0.000001);
    MSG.Lat = htonl(info->latitude / 0.000001);
    MSG.Altitude = 0;

    MSG.Speed = htonl(info->speed * 10);
    MSG.SpeedDir = htonl(info->heading * 100);

    Send((const char*)&MSG, sizeof(RadarMsgProtocol));
}